<html>
<head>
    <script src="resources/cross-frame-access.js"></script>
    <script>
        window.onload = function()
        {
            if (window.testRunner) {
                testRunner.dumpAsText();
                testRunner.waitUntilDone();
            }

            // Test enumerating the Window object
            var b_win = document.getElementsByTagName("iframe")[0].contentWindow;
            try {
                for (var k in b_win) {
                    if (k == "customWindowProperty") {
                        log("FAIL: Cross frame access by enumerating the window object was allowed.");
                        return;
                    }
                }
            } catch (e) {
            }
            log("PASS: Cross frame access by enumerating the window object was denied.");

            try {
                var b_winKeys = Object.keys(b_win);
                if (b_winKeys.indexOf("customWindowProperty") != -1) {
                    log("FAIL: Cross frame access by getting the keys of the window object was allowed.");
                    return;
                }
            } catch (e) {
            }
            log("PASS: Cross frame access by getting the keys of the window object was denied.");

            try {
                var b_winPropertyNames = Object.getOwnPropertyNames(b_win);
                if (b_winPropertyNames.indexOf("customWindowProperty") != -1) {
                    log("FAIL: Cross frame access by getting the property names of the window object was allowed.");
                    return;
                }
            } catch (e) {
            }
            log("PASS: Cross frame access by getting the property names of the window object was denied.");

            // Test enumerating the Location object
            var b_win_location = b_win.location;
            for (var k in b_win_location) {
                log("FAIL: Cross frame access by enumerating the Location object was allowed.");
                return;
            }
            log("PASS: Cross frame access by enumerating the Location object revealed no properties.");

            var b_winLocationKeys = Object.keys(b_win_location);
            var keys_failure = false;
            for (var i = 0; i < b_winLocationKeys.length; i++) {
                var k = b_winLocationKeys[i];
                // See also cross-frame-access-location-get.html for the list of accessible keys.
                if (k !== "assign" && k !== "replace") {
                    log("FAIL: Cross frame access by getting the keys of the Location object returned non-whitelisted key: " + k);
                    keys_failure = true;
                }
            }
            if (!keys_failure) {
                log("PASS: Cross frame access by getting the keys of the Location object revealed only whitelisted keys.");
            }

            var b_winLocationPropertyNames = Object.getOwnPropertyNames(b_win_location);
            if (b_winLocationPropertyNames.indexOf("customLocationProperty") != -1) {
                log("FAIL: Cross frame access by getting the property names of the Location object was allowed.");
                return;
            }
            log("PASS: Cross frame access by getting the property names of the Location object revealed no custom properties.");

            if (window.testRunner)
                testRunner.notifyDone();
        }
    </script>
</head>
<body>
    <p>This tests that variable names can't be enumerated cross domain (see http://bugs.webkit.org/show_bug.cgi?id=16387)</p>
    <iframe src="http://localhost:8000/security/resources/cross-frame-iframe-for-enumeration-test.html"></iframe>
    <pre id="console"></pre>
</body>
</html>
